﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;
using System.IO;
using System.Collections;

namespace eCampus
{
    /// <summary>
    /// Formulario para matricular a un alumno en asignatura
    /// </summary>
    public partial class FormMatricular : Form
    {
        #region variables
        ENUsuario alumnoAux = new ENUsuario(); //creo un AlumnoAux apartir del ENUsuario
        ENCursar cursar = new ENCursar();  //creo un cursar apartir del ENCursar
        ENAsignatura asignatura = new ENAsignatura();
        /// <summary>
        /// Guardará el directorio
        /// </summary>
        string miDirectorio = @"c:\ecampusTemp\";
        #endregion
        /// <summary>
        /// Se carga cuando se inicializa el formulario
        /// </summary>
        /// <param name="sender">FormMatricular</param>
        /// <param name="e">Load</param>
        private void FormMatricular_Load(object sender, EventArgs e)
        {
            cbAsignatura.SelectedIndex = -1; // combobox de asignaturas esta vacio inicialmente
        }

        /// <summary>
        /// Constructor parametrizado al que le paso el alumno a matricular
        /// </summary>
        /// <param name="alu">ENUsuario</param>
        public FormMatricular(ENUsuario alu)
        {
            InitializeComponent();

            ///Un criado que me recolectará info o me hará lo que yo le diga
            ENUsuario usuarioCriado = new ENUsuario();
            #region Rellena los datos del formulario
            //Rellena la lista de asignaturas en el combobox
            ArrayList ListaAsignaturas = asignatura.ConsultaAsignaturas();
            ArrayList ListaAsignaturaAux = new ArrayList();
            foreach (ENAsignatura asig in ListaAsignaturas)
            {
                ListaAsignaturaAux.Add(asig.Nombre);
            }

            cbAsignatura.DataSource = ListaAsignaturaAux;
            //Rellena el Nombre Apellido1 y Apellido2 del usuario en el Textbox
            alumnoAux = alu;
            tbNombreApell.Text = alu.Nombre + " " + alu.Apellido1 + " " + alu.Apellido2;
            //Rellena el año en el textbox
            tbAnyo.Text = System.DateTime.Today.Year.ToString();
            #endregion
            #region carga Imagen
            //-------------
            // CARGO IMAGEN
            //-------------
            ///traigo imagen: editable
            if (alu.Imagen != "")
            {
                lbPathImagen.Text = alu.Imagen;

                //Me preparo el directorio

                try
                {
                    //Si esta lo borro y lo vuelvo a crear
                    if (Directory.Exists(miDirectorio) == true)
                    {
                        Directory.Delete(miDirectorio, true);
                        Directory.CreateDirectory(miDirectorio);
                    }
                    else
                    {
                        Directory.CreateDirectory(miDirectorio);
                    }

                    ///Bajo imagen desde Dropbox
                    usuarioCriado.DescargarImagen(alu.Correo, miDirectorio);

                    ///extracto nombre de la imagen 
                    string[] words = lbPathImagen.Text.Split('/');
                    foreach (string word in words)
                    {
                        cbFicheroDropbox.Items.Add(word);
                    }
                    int numero = cbFicheroDropbox.Items.Count;

                    ///la coloco en el picturebox adecuado
                    string rutaFichero = miDirectorio + (cbFicheroDropbox.Items[numero - 1]).ToString();

                    ///la cargo en el pictureBox
                    FileStream ms;
                    ms = new FileStream(rutaFichero, FileMode.Open, FileAccess.Read);
                    pictImangen.Image = Image.FromStream(ms);
                    ms.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("No se han podido cargar los datos del Usuario ", "Problema");
                }
             }
             #endregion

            RellenarDatagrid(true);
        }

        #region Matricula una asignatura
        private void btMatricular_Click(object sender, EventArgs e)
        {
            //Limpio los errores
            errorProviderAsignaturaVacia.Clear();
            errorProviderAsignaturaRepetida.Clear();
            //variable que comprueba si hay errores
            bool error = false;
            try
            {
                // Compruebo que se ha seleccionado una asignatura
                if (cbAsignatura.Text == "")
                {
                    errorProviderAsignaturaVacia.SetError(cbAsignatura, "Selecciona una asignatura");
                    error = true;
                }

                else
                {
                    //Compruebo que el alumno no esta matriculado en esa asignatura
                    if (cursar.EsYaMatriculadoEnEstaAsignatura(alumnoAux.Correo, cbAsignatura.Text) == true)
                    {
                        errorProviderAsignaturaRepetida.SetError(cbAsignatura,
                        "El alumno ya esta matriculado en esa asignatura");
                        error = true;
                    }
                }

                if (error == false)
                {
                    DataTable codigoAsignaturaPorNombre = new DataTable();
                    codigoAsignaturaPorNombre = (asignatura.DimeCodigoSegunNombre(cbAsignatura.Text));
                    ENCursar salida = new ENCursar(alumnoAux.Correo, System.DateTime.Now, codigoAsignaturaPorNombre.Rows[0][0].ToString(), 0, 0, 0);
                    cursar.AltaCursar(salida);
                    MessageBox.Show("Se ha matriculado correctamente de la asignatura", "Correcto", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    //recargo datagridview
                    RellenarDatagrid();
                    //limpio los campo asignatura
                    LimpiarCampo();
                    //limpio los posibles errores
                    errorProviderAsignaturaVacia.Clear();
                    errorProviderAsignaturaRepetida.Clear();
                }
            }
            catch (FormatException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
        #endregion

        /// <summary>
        /// Limpia campo de formulario
        /// </summary>
        private void LimpiarCampo() //Pone el campo Asignatura vacio
        {
            cbAsignatura.SelectedIndex = -1;
        }

        /// <summary>
        /// Rellena datagrid en formulario
        /// </summary>
        /// <param name="primera">false</param>
        private void RellenarDatagrid(bool primera = false)
        {
            //  dgAsigAlumno.DataSource = null;
            ENAsignatura asig = new ENAsignatura();

            dgAsigAlumno.DataSource = asig.ConsultaAsignaturasAlumno(alumnoAux.Correo);

            if (primera)
            {
                //Añade columna borrar
                DataGridViewImageColumn ColEliminar = new DataGridViewImageColumn();
                ColEliminar.Name = "elim";
                ColEliminar.HeaderText = "";
                ColEliminar.Image = eCampus.Properties.Resources.btBorrar;
                ColEliminar.Width = 30;
                dgAsigAlumno.Columns.Add(ColEliminar);


                //Digo qué columnas van a estar visibles
                dgAsigAlumno.Columns["asiCodigo"].Visible = true;
                dgAsigAlumno.Columns["asiNombre"].Visible = true;
                dgAsigAlumno.Columns["asiCreditos"].Visible = true;
                dgAsigAlumno.Columns["asiCuatrimestre"].Visible = true;

                //TAMAÑO DE LAS COLUMNAS
                dgAsigAlumno.Columns["asiCodigo"].Width = 45;
                dgAsigAlumno.Columns["asiNombre"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                dgAsigAlumno.Columns["asiCreditos"].Width = 50;
                dgAsigAlumno.Columns["asiCuatrimestre"].Width = 70;

                //ORDEN DE LAS COLUMNAS
                dgAsigAlumno.Columns["asiCodigo"].DisplayIndex = 0;
                dgAsigAlumno.Columns["asiNombre"].DisplayIndex = 1;
                dgAsigAlumno.Columns["asiCreditos"].DisplayIndex = 2;
                dgAsigAlumno.Columns["asiCuatrimestre"].DisplayIndex = 3;


                //TEXTO DE LA CABECERQA DE LAS COLUMNAS
                dgAsigAlumno.Columns["asiCodigo"].HeaderText = "Código";
                dgAsigAlumno.Columns["asiNombre"].HeaderText = "Nombre";
                dgAsigAlumno.Columns["asiCreditos"].HeaderText = "Créditos";
                dgAsigAlumno.Columns["asiCuatrimestre"].HeaderText = "Cuatrimestre";

                dgAsigAlumno.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;
            }
        }

        /// <summary>
        /// Evento CellContentClick
        /// </summary>
        /// <param name="sender">dgAsigAlumno</param>
        /// <param name="e">CellContentClick</param>
        private void dgAsigAlumno_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex == dgAsigAlumno.Columns["elim"].Index)
            {
 
                ENCursar salida = new ENCursar(alumnoAux.Correo, System.DateTime.Now, dgAsigAlumno.CurrentRow.Cells["asiCodigo"].Value.ToString(), 0, 0, 0);

                if (MessageBox.Show("¿Desea eliminar permanentemente esta asignatura?", "Eliminar asignatura", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    cursar.BorraCursar(salida);
                    RellenarDatagrid();
                }
            }
        }
    }
}




